package com.yzj.android.dao;


import com.yzj.android.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public abstract class BaseDao {



    //使用 DBUtis 操作数据库


    private QueryRunner queryRunner = new QueryRunner();

    /*

    update() 方法用来执行 Insert Update Del 语句


     */


    public int update (String sql,Object ... args){
//返回 -1  代表执行失败
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.update(connection,sql,args);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.close(connection);
        }

        return -1 ;


    }
//    查询 返回一个JavaBean 的sql 语句 返回的是对象

    public <T> T queryForOne(Class<T> type, String sql, Object ... args){

        Connection connection = JdbcUtils.getConnection();
        try {

            //数据库如果查询出来数据就把 查出来的数据 放到 Bean 对象里面   查不出来 就是 null
           return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.close(connection);
        }
        return null;
    }

    public <T> List<T> queryForList(Class<T> type, String sql, Object... args) {
        Connection con = JdbcUtils.getConnection();
        try {
            return queryRunner.query(con, sql, new BeanListHandler<T>(type), args);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(con);
        }
        return null;
    }
    //执行返回一行一列 的sql语句
    public Object queryForSingleValue(String sql,Object ... args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new ScalarHandler(),args);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.close(connection);
        }
        return null;

    }

}
